package com.proyecto.core.vista.echo.componentes;

import java.lang.reflect.Method;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.StringTokenizer;
import nextapp.echo2.app.CheckBox;
import nextapp.echo2.app.Label;
import nextapp.echo2.app.RadioButton;
import nextapp.echo2.app.SelectField;
import nextapp.echo2.app.TextArea;
import nextapp.echo2.app.TextField;
import nextapp.echo2.app.button.ButtonGroup;
import nextapp.echo2.app.list.ListModel;

import com.proyecto.core.Utilidades.ObtenerFecha;
import com.proyecto.core.Utilidades.UtilConversion;
import com.proyecto.core.Utilidades.UtilReflect;
import com.proyecto.core.modelo.echo.constantes.ParametrosIniciales;
import com.proyecto.core.modelo.excepciones.GeneralException;

import echopointng.SelectFieldEx;

/**
 * @author Administrador
 *
 */
final public class BindingCampo {

	private Object campo;

	private Object objetoDTO;

	private String propiedad;

	private boolean noAceptaModoModif;

	private boolean puedeAsignarse;

	private boolean puedeMostrarse;

	private int formatoCampo;
	
	private String etiquetaCampoAsociado;

	private Class[] parametrosGet;

	private Class[] parametrosSet;

	private Object objetoGet;

	private Object objetoSet;

	private Method metodoGet;

	private Method metodoSet;
	
	private String claveMensaje;

	public BindingCampo() {
		super();
	}

	/**
	 * Permite asociar propiedades de un DTO a un objeto en la Vista, para que
	 * de manera autom�tica muestre valores del DTO al objeto en la vista
	 * 
	 * @param pCampo :
	 *            (Object) se refiere al objeto en la vista. Ejemplo: TextField)
	 * @param pObjetoDTO :
	 *            (Object) se refiere al DTO. Ejemplo: Personas
	 * @param pPropiedad :
	 *            (String) se refiere a una propiedad del DTO. Ejemplo:
	 *            id.ciaopr
	 * @param pPuedeMostrarse :
	 *            (boolean) indica si la propiedad asociada del DTO se asigna al
	 *            objeto en la vista
	 * @param pParametrosGet :
	 *            (Class[]) se refiere a los par�metros requeridos para invocar
	 *            el m�todo GET de la propiedad del DTO
	 */

	public BindingCampo(Object pCampo, Object pObjetoDTO, String pPropiedad,
			Class[] pParametrosGet) {
		super();
		campo = pCampo; 
		objetoDTO = pObjetoDTO;
		propiedad = pPropiedad;
		noAceptaModoModif = true;
		puedeAsignarse = false;
		puedeMostrarse = true;
		parametrosGet = pParametrosGet;
		parametrosSet = new Class[] { null };
		((TextField)campo).setFocusTraversalParticipant(false);
		obtenerMetodosGetSet();
	}

	public BindingCampo(Object pCampo, Object pObjetoDTO, String pPropiedad,
			Class[] pParametrosGet,int pFormatoCampo) {
		super();
		campo = pCampo; 
		objetoDTO = pObjetoDTO;
		propiedad = pPropiedad;
		noAceptaModoModif = true;
		puedeAsignarse = false;
		puedeMostrarse = true;
		parametrosGet = pParametrosGet;
		parametrosSet = new Class[] { null };
		formatoCampo = pFormatoCampo;		
		((TextField)campo).setFocusTraversalParticipant(false);
		obtenerMetodosGetSet();
	}	

	/**
	 * Permite asociar propiedades de un DTO a un objeto en la Vista, para que
	 * de manera autom�tica muestre valores del DTO al objeto en la vista
	 * @param pCampo :(Object) se refiere al objeto en la vista. Ejemplo: TextField
	 * @param pObjetoDTO: (Object) se refiere al DTO. Ejemplo: Personas
	 * @param pPropiedad: String) se refiere a una propiedad del DTO. Ejemplo: id.ciaopr
	 * @param pNoAceptaModoModif: (boolean) indica si el objeto en la vista se dehabilita en
	 *            Modo "MODIFICAR". Todos se habilitan en modo "INCLUIR"
	 * @param pPuedeAsignarse: (boolean) indica si el valor del objeto en la vista se asigna
	 *            a la propiedad asociada del DTO
	 * @param pPuedeMostrarse: (boolean) indica si la propiedad asociada del DTO se asigna al
	 *            objeto en la vista
	 * @param pParametrosSet: (Class[])se refiere a los par�metros requeridos para invocar
	 *            el m�todo SET de la propiedad del DTO
	 * @param formatoCampo: entero constante que indica si el campo debe ser UperCase, LowerCase, Mixer
	 * 			  Case, o de tipo fecha. Es tomado de una clase de constantes. Ejemplo: ParametrosIniciales.Fecha_Mostrar
	 * @param pEtiquetaCampoAsociado: String que identifica alguna etiqueta asociada al campo o el propio
	 * 			  nombre del campo. Usado para informar al usuario algun tipo de valor inesperado de valor
	 * 			  que tratase de setear al pojo. Ejemplo: "Fecha de naciemiento". Debe venir de un Properties.
	 */
	public BindingCampo(Object pCampo, Object pObjetoDTO, String pPropiedad,
			boolean pNoAceptaModoModif, boolean pPuedeAsignarse,
			boolean pPuedeMostrarse,
			Class[] pParametrosSet, int pFormatoFecha,String pEtiquetaCampoAsociado) {
		super();
		campo = pCampo;
		objetoDTO = pObjetoDTO;
		propiedad = pPropiedad;
		noAceptaModoModif = pNoAceptaModoModif;
		puedeAsignarse = pPuedeAsignarse;
		puedeMostrarse = pPuedeMostrarse;
		parametrosGet = new Class[] {  };
		parametrosSet = pParametrosSet;
		formatoCampo = pFormatoFecha;
		etiquetaCampoAsociado = pEtiquetaCampoAsociado;
		obtenerMetodosGetSet();
	}

	public BindingCampo(Object pCampo, Object pObjetoDTO, String pPropiedad,
			boolean pNoAceptaModoModif, boolean pPuedeAsignarse,
			boolean pPuedeMostrarse,
			Class[] pParametrosSet, int pFormatoFecha,String pEtiquetaCampoAsociado,
			String pClaveMensaje) {
		super();
		campo = pCampo;
		objetoDTO = pObjetoDTO;
		propiedad = pPropiedad;
		noAceptaModoModif = pNoAceptaModoModif;
		puedeAsignarse = pPuedeAsignarse;
		puedeMostrarse = pPuedeMostrarse;
		parametrosGet = new Class[] {  };
		parametrosSet = pParametrosSet;
		formatoCampo = pFormatoFecha;
		etiquetaCampoAsociado = pEtiquetaCampoAsociado;
		claveMensaje = pClaveMensaje;
		obtenerMetodosGetSet();
	}
	
	/**
	 * Este metodo ejecuta el GET de una propiedad del DTO para asignarle el valor al componente visual a traves de su respectivo SET
	 */
	final public void BindingGet() {
		if (puedeMostrarse) {
			if (campo instanceof TextField
					&& formatoCampo == ParametrosIniciales.Formato_Letra_Fecha) {
				Object s = invocarMetodoGet();
				try {
					s = ObtenerFecha.cambiarYYYYMMDD_DDMMYYYY(s.toString());
				} catch (Exception e) {
					s = "";
				}
				mostrarValor(s);
			} else {
				mostrarValor(invocarMetodoGet());
			}
		}
	}

	/**
	 * Este m�todo ejecuta el SET de una propiedad del DTO para asignarle el valor del componente visual a trav�s de su respectivo GET
	 * @throws GeneralException
	 */
	final public void BindingSet() throws GeneralException {
		if (puedeAsignarse) {
			
			if (campo instanceof TextField) {
				bindingSetTextField(campo);
			} else if (campo instanceof Label) {
				bindingSetLabel(campo);
			} else if (campo instanceof CheckBox) {
				//TODO revisar..
				if (this.parametrosSet[0] == String.class){
					invocarMetodoSet(UtilConversion
							.logicoaCaracter(((CheckBox) campo).isSelected()));
				}else{
					invocarMetodoSet(UtilConversion
							.logicoaEntero(((CheckBox) campo).isSelected()));
				}
				
				
			} else if (campo instanceof SelectFieldEx) {
				bindingSetSelectFieldEx(campo);
			} else if (campo instanceof SelectField) {
				bindingSetSelectField(campo);
			} else if (campo instanceof ButtonGroup) {
				bindingSetButtonGroup(campo);
			} else if (campo instanceof TextArea) {
				invocarMetodoSet(((TextArea) campo).getText());
			} else if (campo instanceof RadioButton) {
				bindingSetRadioButton(campo);
			}
		}
	}

	final public void mostrarValor(Object pValor) {
		if (puedeMostrarse) {
			if (campo instanceof TextField) {
				if (pValor != null) {
					String valors = String.valueOf(pValor);
					if (pValor instanceof Double || pValor instanceof Float){
						DecimalFormatSymbols dfs = new DecimalFormatSymbols();
						//dfs.setMonetaryDecimalSeparator('.');
				        dfs.setDecimalSeparator('.');
				        DecimalFormat df = new DecimalFormat("############.##", dfs);	
				        valors = df.format(((Double)(pValor)).doubleValue());	
					}
					if (pValor instanceof Integer ){
						DecimalFormatSymbols dfs = new DecimalFormatSymbols();
						//dfs.setMonetaryDecimalSeparator('.');
				        //dfs.setDecimalSeparator('');
				        DecimalFormat df = new DecimalFormat("############", dfs);	
				        valors = df.format(((Integer)(pValor)).intValue() );
					}
					if (pValor instanceof Long ){
						DecimalFormatSymbols dfs = new DecimalFormatSymbols();
						//dfs.setMonetaryDecimalSeparator('.');
				        //dfs.setDecimalSeparator('');
				        DecimalFormat df = new DecimalFormat("############", dfs);	
				        valors = df.format(((Long)(pValor)).intValue() );
					}
					((TextField) campo).setText(valors);
					
				} else {					
					//TODO: estaba comentado, lo descomente .. elias
					 ((TextField) campo).setText("");
				}
			} else if (campo instanceof Label) {
				if (pValor != null) {
					((Label) campo).setText((String) String.valueOf(pValor));
				} else {
					// ((TextField) campo).setText("");
				}
			} else if (campo instanceof CheckBox) {
				if (this.parametrosSet[0] == String.class){
					((CheckBox) campo).setSelected(UtilConversion
							.caracteraLogico((String) pValor));
				}else{
					pValor = (pValor ==null)?"":pValor;
					((CheckBox) campo).setSelected(UtilConversion
							.enteroLogico(pValor.toString()));
				}				
				
			} else if (campo instanceof SelectFieldEx) {
				String[] listaItems = ((SelectFieldEx) campo)
						.getAttributeNames();
				for (int posic = 0; posic < listaItems.length; posic++) {
					Object objetoItem = ((SelectFieldEx) campo)
							.getAttribute(listaItems[posic]);
					try {
						// lo que esta en comentario aplciaria si se
						// getAttribute del selectfield es un DTO
						// Method metodoItem =
						// UtilReflect.obtenerMetodoGet(objetoItem,
						// propiedadCompuesta, propiedad, new Class[] {});
						// Object valor = metodoItem.invoke(objetoItem);
						if (pValor.equals(objetoItem)) {
							((SelectFieldEx) campo)
									.setSelectedItem(listaItems[posic]);
						}

					} catch (Exception e) {
					}
				}
			} else if (campo instanceof SelectField) {
				if (((SelectField) campo).getActionCommand() != null
						&& ((SelectField) campo).getActionCommand().contains(
								"|")) {
					StringTokenizer listaCodigo = new StringTokenizer(
							((SelectField) campo).getActionCommand(), "|");
					Integer posic = 0;
					

					String valor = (String) listaCodigo.nextElement();

					while (!valor.equals(pValor)
							&& listaCodigo.hasMoreElements()) {
						valor = (String) listaCodigo.nextElement();
						posic = posic + 1;
					}
					if (valor.equals(pValor))
						((SelectField) campo).setSelectedIndex(posic);
					else
						((SelectField) campo).setSelectedItem(null);

					
				} else {
					ListModel listaItems = ((SelectField) campo).getModel();
					for (int posic = 0; posic < listaItems.size(); posic++) {
						try {
							if (pValor.equals(listaItems.get(posic))) {
								((SelectField) campo)
										.setSelectedItem(listaItems.get(posic));
							}

						} catch (Exception e) {
						}
					}
				}
			} else if (campo instanceof ButtonGroup) {
				RadioButton[] rdt = ((ButtonGroup) campo).getButtons();
				for (int posic = 0; posic < rdt.length; posic++) {
					if (rdt[posic].getActionCommand().equals(pValor))
						rdt[posic].setSelected(true);
					else
						rdt[posic].setSelected(false);
				}
			} else if (campo instanceof RadioButton) {
				if (this.parametrosSet[0] == String.class){
					((RadioButton) campo).setSelected(UtilConversion
							.caracteraLogico((String) pValor));
				}else{
					pValor = (pValor ==null)?"":pValor;
					((RadioButton) campo).setSelected(UtilConversion
							.enteroLogico(pValor.toString()));
				}	
				
			}else if (campo instanceof TextArea) {
				pValor = (pValor ==null)?"":pValor;
				if (pValor != null) {
					((TextArea) campo).setText((String) String.valueOf(pValor));
				} else {
					// ((TextArea) campo).setText("");
				}
			}
		}
	}

	final public void BindingCampoHabilitar(boolean pEstaHabilitado) {
		pEstaHabilitado = (pEstaHabilitado && puedeAsignarse);
		if (campo instanceof TextField) {
			((TextField) campo).setEnabled(pEstaHabilitado);
		} else
		// No aplica al Label
		// if (campo instanceof Label) {
		// ((Label) campo).setEnabled(pEstaHabilitado);
		// } else
		if (campo instanceof CheckBox) {
			((CheckBox) campo).setEnabled(pEstaHabilitado);
		} else if (campo instanceof SelectFieldEx) {
			((SelectFieldEx) campo).setEnabled(pEstaHabilitado);
		} else if (campo instanceof SelectField) {
			((SelectField) campo).setEnabled(pEstaHabilitado);
		} else if (campo instanceof ButtonGroup) {
			RadioButton[] rdt = ((ButtonGroup) campo).getButtons();
			for (int posic = 0; posic < rdt.length; posic++) {
				rdt[posic].setEnabled(pEstaHabilitado);
			}
		} else if (campo instanceof RadioButton) {
			RadioButton rdt = ((RadioButton) campo);
			rdt.setEnabled(pEstaHabilitado);
			
		} else if (campo instanceof TextArea) {
			((TextArea) campo).setEnabled(pEstaHabilitado);
		}
	}

	private void obtenerMetodosGetSet() {
		try {
			if (puedeMostrarse) {
				Object[] elementosGet = UtilReflect.obtenerMetodoGet(objetoDTO,
						propiedad, parametrosGet);
				objetoGet = elementosGet[0];
				metodoGet = (Method) elementosGet[1];
			}
			if (puedeAsignarse) {
				Object[] elementosSet = UtilReflect.obtenerMetodoSet(objetoDTO,
						propiedad, parametrosSet);
				objetoSet = elementosSet[0];
				metodoSet = (Method) elementosSet[1];
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public Object invocarMetodoGet() {
		try {
			if(objetoGet!=null){
				return (Object) metodoGet.invoke(objetoGet);
			}else{
				return null;
			}
			
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	// Este metodo utiliza la propiedad objetoDTO
	public void invocarMetodoSet(Object pValor) {
		try {
			metodoSet.invoke(objetoSet, pValor);
		} catch (Exception e) {
//			e.printStackTrace();
		}
	}

	final public Object getCampo() {
		return campo;
	}

	final public String getpropiedad() {
		return propiedad;
	}

	public boolean getNoAceptaModoModif() {
		return noAceptaModoModif;
	}

	final public void bindingSetTextField(Object campo) throws GeneralException {
		if (((TextField) campo).getText().length() > 0) {
			if (parametrosSet[0].equals(String.class)) {
				if (formatoCampo == ParametrosIniciales.Formato_Letra_Fecha) {
					bindingSetFecha(campo);
				} else if(formatoCampo == ParametrosIniciales.Formato_Letra_UPER){
					invocarMetodoSet(((TextField) campo).getText().toUpperCase());
				} else if(formatoCampo == ParametrosIniciales.Formato_Letra_lower){
					invocarMetodoSet(((TextField) campo).getText().toLowerCase());
				} else if (formatoCampo == ParametrosIniciales.Formato_Letra_Hora) {
					bindingSetHora(campo);
				}else{
					invocarMetodoSet(((TextField) campo).getText());
				}
			}else if (parametrosSet[0].equals(Integer.class)) {
				if ("".equals(((TextField) campo).getText())) {
					((TextField) campo).setText("0");
				}
				try {
					invocarMetodoSet(Integer.valueOf(((TextField) campo)
							.getText()));
				} catch (Exception e) {
					//throw new GeneralException("formato.persona.Integer.ValorInvalido",etiquetaCampoAsociado);
					throw new GeneralException("formato."+claveMensaje+".Integer.ValorInvalido",etiquetaCampoAsociado);
					
				}

			} else if (parametrosSet[0].equals(Long.class)) {
				if ("".equals(((TextField) campo).getText())) {
					((TextField) campo).setText("0");
				}
				try {
					invocarMetodoSet(Long.valueOf(((TextField) campo)
							.getText()));
				} catch (Exception e) {
					//throw new GeneralException("formato.persona.Integer.ValorInvalido",etiquetaCampoAsociado);
					throw new GeneralException("formato."+claveMensaje+".Double.ValorInvalido",etiquetaCampoAsociado);
				}

			}
			else if (parametrosSet[0].equals(Short.class)) {
				if ("".equals(((TextField) campo).getText())) {
					((TextField) campo).setText("0");
				}
				try {
					invocarMetodoSet(Short.valueOf(((TextField) campo)
							.getText()));
				} catch (Exception e) {
					/*Modificar ac� el propertie para que quede de la forma "Formato.Short.ValorInvalido"*/
					//throw new GeneralException("formato.persona.Integer.ValorInvalido",etiquetaCampoAsociado);
					throw new GeneralException("formato."+claveMensaje+".Integer.ValorInvalido",etiquetaCampoAsociado);
				}

			} else if (parametrosSet[0].equals(Double.class)) {
				if ("".equals(((TextField) campo).getText())) {
					((TextField) campo).setText("0");
				}
				try {
					invocarMetodoSet(Double.valueOf(((TextField) campo)
							.getText()));
				} catch (Exception e) {
					//throw new GeneralException("formato.persona.Double.ValorInvalido",etiquetaCampoAsociado);
					throw new GeneralException("formato."+claveMensaje+".Double.ValorInvalido",etiquetaCampoAsociado);
				}

			} else if (parametrosSet[0].equals(Float.class)) {
				if ("".equals(((TextField) campo).getText())) {
					((TextField) campo).setText("0");
				}
				try{
					invocarMetodoSet(Float.valueOf(((TextField) campo).getText()));
				}catch(Exception e){
					//throw new GeneralException("formato.persona.Float.ValorInvalido",etiquetaCampoAsociado);
					throw new GeneralException("formato."+claveMensaje+".Float.ValorInvalido",etiquetaCampoAsociado);
				}
			} else
				invocarMetodoSet(null);
		} else
			invocarMetodoSet(null);
	}

	final public void bindingSetLabel(Object campo) throws GeneralException {
		if (((Label) campo).getText().length() > 0) {
			if (parametrosSet[0].equals(String.class))
				invocarMetodoSet(((Label) campo).getText());
			else if (parametrosSet[0].equals(Integer.class)) {
				if ("".equals(((Label) campo).getText())) {
					((Label) campo).setText("0");
				}
				invocarMetodoSet(Integer.valueOf(((Label) campo).getText()));
			} else if (parametrosSet[0].equals(Double.class)) {
				if ("".equals(((Label) campo).getText())) {
					((Label) campo).setText("0");
				}
				invocarMetodoSet(Double.valueOf(((Label) campo).getText()));
			} else if (parametrosSet[0].equals(Float.class)) {
				if ("".equals(((Label) campo).getText())) {
					((Label) campo).setText("0");
				}
				invocarMetodoSet(Float.valueOf(((Label) campo).getText()));
			}
		} else
			invocarMetodoSet(null);
	}

	final public void bindingSetSelectField(Object campo) {
		Object valor = null;
		if (((SelectField) campo).getActionCommand() != null
				&& ((SelectField) campo).getActionCommand().contains("|")) {
			StringTokenizer listaCodigo = new StringTokenizer(
					((SelectField) campo).getActionCommand(), "|");
			Integer posic = ((SelectField) campo).getSelectedIndex();
			Integer posicBusqueda = -1;
			while (posicBusqueda < posic && listaCodigo.hasMoreElements()) {
				posicBusqueda = posicBusqueda + 1;
				valor = (String) listaCodigo.nextElement();
				if (posic.equals(posicBusqueda))
					break;
			}
			if (!posic.equals(posicBusqueda))
				valor = null;

		} else
			valor = ((SelectField) campo).getSelectedItem();
		try {
			// lo que esta en comentario aplciaria si se getAttribute
			// del selectfield es un DTO
			// Method metodoItem =
			// UtilReflect.obtenerMetodoGet(objetoItem,
			// propiedadCompuesta, propiedad, new Class[] {});
			// invocarMetodoSet(metodoItem.invoke(objetoItem));
			invocarMetodoSet(valor);
		} catch (Exception e) {
			// TODO: handle exception
		}
	}

	final public void bindingSetButtonGroup(Object campo) {
		Object valor = null;

		RadioButton[] rdt = ((ButtonGroup) campo).getButtons();
		for (int posic = 0; posic < rdt.length; posic++) {
			if (rdt[posic].isSelected())
				valor = rdt[posic].getActionCommand();
		}
		invocarMetodoSet(valor);
	}

	final public void bindingSetRadioButton(Object campo) {
		Object valor = null;

		RadioButton rdt = ((RadioButton) campo);
		if (rdt.isSelected()){
			valor = "S";		
			
		}else{
			valor = "N";
		}
		//System.out.println("bindingSetRadioButton:: " + valor);
		
		invocarMetodoSet(valor);
	}
	
	final public void bindingSetSelectFieldEx(Object campo) {
		Object itemSeleccionado = ((SelectFieldEx) campo).getSelectedItem();
		Object valor = null;
		if (itemSeleccionado != null) {
			Object objetoItem = ((SelectFieldEx) campo)
					.getAttribute(itemSeleccionado.toString());
			valor = objetoItem;
		}
		try {
			// lo que esta en comentario aplciaria si se getAttribute
			// del selectfield es un DTO
			// Method metodoItem =
			// UtilReflect.obtenerMetodoGet(objetoItem,
			// propiedadCompuesta, propiedad, new Class[] {});
			// invocarMetodoSet(metodoItem.invoke(objetoItem));
			invocarMetodoSet(valor);
		} catch (Exception e) {
			// TODO: handle exception
		}
	}

	final public void bindingSetFecha(Object campo) throws GeneralException {
		String s = ((TextField) campo).getText();
		int tipoFechaMostrar = ParametrosIniciales.FECHA_MOSTRAR;
		switch (tipoFechaMostrar) {
		case 1:
			if(ObtenerFecha.valida_ddmmyyyySeparadoConSlash(ObtenerFecha.cambiarYYYYMMDD_DDMMYYYY(s))==1){
				invocarMetodoSet(s);
			}else{
				//throw new GeneralException("formato.persona.Fecha.invalida",etiquetaCampoAsociado);
				throw new GeneralException("formato."+claveMensaje+".Fecha.invalida",etiquetaCampoAsociado);
			}
		case  2:
			if (ObtenerFecha.valida_ddmmyyyySeparadoConSlash(s) == 1) {
				invocarMetodoSet(ObtenerFecha.cambiarDDMMYYYY_YYYYMMDD(s));
			} else {
				//throw new GeneralException("formato.persona.Fecha.invalida",etiquetaCampoAsociado);
				throw new GeneralException("formato."+claveMensaje+".Fecha.invalida",etiquetaCampoAsociado);
			}
			break;

		default:
			break;
		}
		
	}
	
	final public void bindingSetHora(Object campo) throws GeneralException {
		String horas = ((TextField) campo).getText();
		System.out.println("bindingSetHora: "+horas);
		int tipoHoraMostrar = ParametrosIniciales.HORA_MOSTRAR;
		switch (tipoHoraMostrar) {
		case 1:
			//Long horaLong = Long.parseLong(s);
			if( ObtenerFecha.validar_HoraMilitar( horas ) == 1){
				invocarMetodoSet(horas);
			}else{
				//throw new GeneralException("formato.persona.Fecha.invalida",etiquetaCampoAsociado);
				throw new GeneralException("formato."+claveMensaje+".Hora.invalida",etiquetaCampoAsociado);
			}
		case  2:
			/*if (ObtenerFecha.valida_ddmmyyyySeparadoConSlash(s) == 1) {
				invocarMetodoSet(ObtenerFecha.cambiarDDMMYYYY_YYYYMMDD(s));
			} else {
				//throw new GeneralException("formato.persona.Fecha.invalida",etiquetaCampoAsociado);
				throw new GeneralException("formato."+claveMensaje+".Fecha.invalida",etiquetaCampoAsociado);
			}*/
			break;

		default:
			break;
		}
		
	}
}
